// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Start Message Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------


//-------Aliases-------//
private alias 4 : TYPE_STARTMESSAGE
private alias object.value11 : character.sel
private alias object.value12 : touch.delay
private alias object.value13 : touch.fade

public alias saveRAM[286] : saved.language
public alias saveRAM[295]: saved.mobile
public alias saveRAM[296]: saved.transmobile
public alias saveRAM[301] : saved.ShadowJump
public alias saveRAM[302] : saved.ShadowClear
public alias saveRAM[303] : saved.ShadowPeelout
public alias saveRAM[304] : saved.ShadowCrouch
public alias saveRAM[305] : saved.ShadowInv
public alias saveRAM[304] : saved.TitleStyle

// Function declarations
reserve function TouchControls

// Tables
private table CharLoad
	0, 1, 2, 5, 3, 4, 6
end table

function TouchControls
	object.inkEffect = INK_ALPHA
		CheckTouchRect(0, 0, screen.xsize, screen.ysize)
		if checkResult > -1
			touch.fade = 0
		else
			touch.fade++
		end if
		if touch.fade >= 400
			if object.alpha > 0
   				 object.alpha -= 15
			end if
		else
			switch saved.transmobile
				case 0
					object.alpha = 191
					break
				case 1
					object.alpha = 255
					break
				case 2
					object.alpha = 0
					break
				case 3
					object.alpha = 63
					break
				case 4
					object.alpha = 127
					break
				default					
					object.alpha = 191
					break
			end switch
		end if	
	temp0 = screen.xsize
	switch options.gamemode
		case 0
		case 1	
		case 3
			temp0 -= 44
			break
		case 2
		case 5
			temp0 += 44
			break
	end switch
	DrawSpriteScreenFX(49,FX_INK,16,160)
	switch options.gamemode
		case 0
		case 1	
		case 3
			temp0 -= 43
			break
		case 2
		case 5
			temp0 -= 70
			break
	end switch
	DrawSpriteScreenFX(0,0,temp0,8)
		if inputDown.Left==1
			DrawSpriteScreenFX(52,FX_INK,16,162)
			
		endif
		if inputDown.Down==1
			DrawSpriteScreenFX(51,FX_INK,16,200)
			
		end if
		if inputDown.Right==1
			DrawSpriteScreenFX(53,FX_INK,54,162)
			
		endif
		if inputDown.Up==1
			DrawSpriteScreenFX(50,FX_INK,16,162)
		endif
		switch options.gamemode
			case 0
			case 1	
			case 3
				temp0 += 50
				break
			case 2
			case 5
				temp0 += 28
				break
		end switch
		
			if inputDown.buttonA==1
				DrawSpriteScreenFX(55,FX_INK,temp0,174)	
			else
				DrawSpriteScreenFX(54,FX_INK,temp0,174)
			endif
end function


event ObjectMain
	switch object.state
	case 0
		CheckTouchRect(0, 0, screen.xsize, screen.ysize)
		temp0 = 0
		if checkResult > -1
			temp0 = 1
			saveRAM[295] = 1
			WriteSaveRam()
		end if
		if inputPress.start == 1
			temp0 = 1	
			saveRAM[295] = 0
			WriteSaveRam()
		end if
		if inputPress.buttonA == 1
			//temp0 = 1
		end if
		if inputPress.buttonB == 1
			//temp0 = 1
		end if
		if inputPress.buttonC == 1
			//temp0 = 1
		end if
		if temp0 == 1
			if options.stageSelectFlag == 1
				object.state = 5
			else
				object.state = 1
			end if
		else
			if saved.TitleStyle == 0
				object.value4++
				if object.value4 == 720
					object.state = 4
				end if
			end if
		end if
		break
	case 1
		object.value0 += 8
		music.volume -= 2
		if object.value0 == 320
			StopMusic()
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = StageName[P - MAIN MENU]
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 2
		object.value0 += 8
		music.volume -= 2
		if object.value0 == 320
			StopMusic()
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = 5
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 3
		object.value0 += 8
		music.volume -= 2
		if object.value0 == 320
			StopMusic()
			stage.listPos = 4
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 4
		object.value0 += 8
		music.volume -= 2
		if object.value0 == 320
			StopMusic()
			if attract.stage == 3
				stage.activeList = SPECIAL_STAGE
				stage.listPos = 0
				LoadPalette("SpecialStage.act",0,0,0,128)
			else
				stage.activeList = REGULAR_STAGE
				stage.listPos = attract.stage
				stage.listPos *= 3
			end if
			Rand(stage.playerListPos, 4)
			if stage.playerListPos < 3
					stage.player2Enabled = 0
			end if
			attract.stage++
			attract.stage &= 3
			options.attractMode = 1
			credits.screen = 0
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 5 // level select
		if saved.mobile == 1
			CallFunction(TouchControls)
		end if
		LoadPalette("LevelSel.act", 0, 0, 0, 256)
		stage[0].activeLayer = 0
		object.value10 = 1
		LoadSpriteSheet("LevelSelect/TextOG.gif")
		SetupMenu(MENU_1, 0, 1, 2)
		AddMenuEntry(MENU_1, "GREEN HILL ZONE  STAGE 1", 1)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "MARBLE ZONE      STAGE 1", 0)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "SPRING YARD ZONE STAGE 1", 0)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "LABYRINTH ZONE   STAGE 1", 0)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "STAR LIGHT ZONE  STAGE 1", 0)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "SCRAP BRAIN ZONE STAGE 1", 0)
		AddMenuEntry(MENU_1, "                 STAGE 2", 0)
		AddMenuEntry(MENU_1, "                 STAGE 3", 0)
		AddMenuEntry(MENU_1, "FINAL ZONE              ", 0)
		AddMenuEntry(MENU_1, "SPECIAL STAGE   01      ", 0)
		AddMenuEntry(MENU_1, "SOUND SELECT    00      ", 0)
		AddMenuEntry(MENU_1, "                        ", 0)
		AddMenuEntry(MENU_1, "PLAYER             SONIC", 0)
		stage.playerListPos = 0
		menu1.selection = 0
		object.state = 6
		object.value1 = 0
		object.value2 = 0
		object.value3 = 0
		object.value4 = 0
		object.value5 = 0
		object.value6 = 6
		object.value6 += saved.superStates
		object.value7 = 6
		object.value7 += SaveRAM[412]
		character.sel = 0
		break
	case 6

	if saved.mobile == 1
				CheckTouchRect(0, 96, screen.xcenter, screen.ysize)
				if checkResult > -1
					arrayPos0 = checkResult
					temp0 = touchscreen[arrayPos0].xpos
					temp0 -= 56
					temp1 = touchscreen[arrayPos0].ypos
					temp1 -= 184
					ATan2(temp2, temp0, temp1)
					temp2 += 42
					temp2 &= 255
					temp2 >>= 6
					switch temp2
					case 0
						inputPress.right = 1
						break
					case 1
						inputDown.down = 1
						break
					case 2
						inputPress.left = 1
						break
					case 3
						inputDown.up = 1
						break
					end switch
				end if
				CheckTouchRect(screen.xcenter, 96, screen.xsize, 240)
				if checkResult > -1
					inputDown.buttonA = 1
				end if
				if touchJump == 0
					inputPress.buttonA |= inputDown.buttonA
				end if
				touchJump = inputDown.buttonA
	end if


		if inputPress.buttonB == 1
			object.state = 9
		end if
		
		if inputDown.down == 1
			object.value1 = 0
			object.value2++
			if object.value2 == 1
				object.value3++
			end if
			object.value2 %= 12
		else
			if inputDown.up == 1
				object.value2 = 0
				object.value1++
				if object.value1 == 1
					object.value3--
				end if
				object.value1 %= 12
			else
				object.value1 = 0
				object.value2 = 0
			end if
		end if
		while object.value3 < 0
			object.value3 += 22
		loop
		object.value3 %= 22
		
		menu1.selection = object.value3
		if menu1.selection == 21
			menu1.selection++
		end if
		
		switch object.value3
			case 20
				temp1 = 0
				if inputPress.left == 1
					object.value4--
					temp1 = 1
				end if
				if inputPress.right == 1
					object.value4++
					temp1 = 1
				end if
				while object.value4 < 0
					object.value4 += 19
				loop
				object.value4 %= 19
				if temp1 == 1
					switch object.value4
						case 0
							EditMenuEntry(MENU_1, "SOUND SELECT    00      ", 20, 1)
							break
						case 1
							EditMenuEntry(MENU_1, "SOUND SELECT    01      ", 20, 1)
							break
						case 2
							EditMenuEntry(MENU_1, "SOUND SELECT    02      ", 20, 1)
							break
						case 3
							EditMenuEntry(MENU_1, "SOUND SELECT    03      ", 20, 1)
							break
						case 4
							EditMenuEntry(MENU_1, "SOUND SELECT    04      ", 20, 1)
							break
						case 5
							EditMenuEntry(MENU_1, "SOUND SELECT    05      ", 20, 1)
							break
						case 6
							EditMenuEntry(MENU_1, "SOUND SELECT    06      ", 20, 1)
							break
						case 7
							EditMenuEntry(MENU_1, "SOUND SELECT    07      ", 20, 1)
							break
						case 8
							EditMenuEntry(MENU_1, "SOUND SELECT    08      ", 20, 1)
							break
						case 9
							EditMenuEntry(MENU_1, "SOUND SELECT    09      ", 20, 1)
							break
						case 10
							EditMenuEntry(MENU_1, "SOUND SELECT    10      ", 20, 1)
							break
						case 11
							EditMenuEntry(MENU_1, "SOUND SELECT    11      ", 20, 1)
							break
						case 12
							EditMenuEntry(MENU_1, "SOUND SELECT    12      ", 20, 1)
							break
						case 13
							EditMenuEntry(MENU_1, "SOUND SELECT    13      ", 20, 1)
							break
						case 14
							EditMenuEntry(MENU_1, "SOUND SELECT    14      ", 20, 1)
							break
						case 15
							EditMenuEntry(MENU_1, "SOUND SELECT    15      ", 20, 1)
							break
						case 16
							EditMenuEntry(MENU_1, "SOUND SELECT    16      ", 20, 1)
							break
						case 17
							EditMenuEntry(MENU_1, "SOUND SELECT    17      ", 20, 1)
							break
						case 18
							EditMenuEntry(MENU_1, "SOUND SELECT    18      ", 20, 1)
							break
					end switch
				end if
				break
			case 19
				temp1 = 0
				if inputPress.left == 1
					object.value5--
					temp1 = 1
				end if
				if inputPress.right == 1
					object.value5++
					temp1 = 1
				end if
				while object.value5 < 0
					object.value5 += object.value6
				loop
				object.value5 %= object.value6
				if temp1 == 1
					switch object.value5
						case 0
							EditMenuEntry(MENU_1, "SPECIAL STAGE   01      ", 19, 1)
							break
						case 1
							EditMenuEntry(MENU_1, "SPECIAL STAGE   02      ", 19, 1)
							break
						case 2
							EditMenuEntry(MENU_1, "SPECIAL STAGE   03      ", 19, 1)
							break
						case 3
							EditMenuEntry(MENU_1, "SPECIAL STAGE   04      ", 19, 1)
							break
						case 4
							EditMenuEntry(MENU_1, "SPECIAL STAGE   05      ", 19, 1)
							break
						case 5
							EditMenuEntry(MENU_1, "SPECIAL STAGE   06      ", 19, 1)
							break
						case 6
							EditMenuEntry(MENU_1, "SPECIAL STAGE   07      ", 19, 1)
							break
					end switch
				end if
				break
			case 21
				temp1 = 0
				if inputPress.left == 1
					character.sel--
					temp1 = 1
				end if
				if inputPress.right == 1
					character.sel++
					temp1 = 1
				end if
				while character.sel < 0
					character.sel += object.value7
				loop
				character.sel %= object.value7
				if temp1 == 1
					switch character.sel
						case 0
							EditMenuEntry(MENU_1, "PLAYER             SONIC", 22, 1)
							break
						case 1
							EditMenuEntry(MENU_1, "PLAYER             TAILS", 22, 1)
							break
						case 2
							EditMenuEntry(MENU_1, "PLAYER          KNUCKLES", 22, 1)
							break
						case 3
							EditMenuEntry(MENU_1, "PLAYER               AMY", 22, 1)
							break
						case 4
							EditMenuEntry(MENU_1, "PLAYER     SONIC & TAILS", 22, 1)
							break
						case 5
							EditMenuEntry(MENU_1, "PLAYER  KNUCKLES & TAILS", 22, 1)
							break
						case 6
							EditMenuEntry(MENU_1, "PLAYER            SHADOW", 22, 1)
							break
					end switch
				end if
				break
		end switch
		
		CheckEqual(inputPress.buttonA, 1)
		temp0 = checkResult
		CheckEqual(inputPress.start, 1)
		temp0 |= checkResult
		if temp0 == 1
			WriteSaveRam()
			options.attractMode = 0
			switch object.value3
				case 19 //special stage
					stage.activeList = SPECIAL_STAGE
					stage.listPos = object.value5
					PlaySfx(SfxName[Warp], 0)
					fadeColor = 208
					fadeColor <<= 16
					temp0 = 255
					temp0 <<= 8
					fadeColor += temp0
					fadeColor += 224
					object.state = 8					
					if object.value9 == 1
						specialStage.emeralds = 127
					end if
					break
				case 20 //sound select
					switch object.value4
						case 0
							StopMusic()
							break
						case 1
							SetMusicTrack("GreenHill.ogg", 0, 0x9B0AA)
							PlayMusic(0)
							break
						case 2
							SetMusicTrack("Marble.ogg", 0, 0x18434)
							PlayMusic(0)
							break
						case 3
							SetMusicTrack("SpringYard.ogg", 0, 0x18968)
							PlayMusic(0)
							break
						case 4
							SetMusicTrack("Labyrinth.ogg", 0, 0x149DC)
							PlayMusic(0)
							
							break
						case 5
							SetMusicTrack("Starlight.ogg", 0, 0x1498C)
							PlayMusic(0)
							break
						case 6
							SetMusicTrack("ScrapBrain.ogg", 0, 1)
							PlayMusic(0)
							break
						case 7
							SetMusicTrack("Invincibility.ogg", 0, 0x9A68)
							PlayMusic(0)
							break
						case 8
							PlaySfx(SfxName[Life], 0)
							PauseMusic()
							ResetObjectEntity(25, TypeName[Music Event], 2, 0, 0)
							object[25].priority = PRIORITY_ACTIVE
							break
						case 9
							SetMusicTrack("SpecialStage.ogg", 0, 1)
							PlayMusic(0)
							break
						case 10
							SetMusicTrack("Titlescreen.ogg", 0, 0)
							PlayMusic(0)
							break
						case 11
							SetMusicTrack("Ending.ogg", 0, 0)
							PlayMusic(0)
							break
						case 12
							SetMusicTrack("Boss.ogg", 0, 1)
							PlayMusic(0)
							break
						case 13
							SetMusicTrack("Final.ogg", 0, 0x14AC8)
							PlayMusic(0)
							break
						case 14
							SetMusicTrack("ActComplete.ogg", 0, 0)
							PlayMusic(0)
							break
						case 15
							SetMusicTrack("GameOver.ogg", 0, 0)
							PlayMusic(0)
							break
						case 16
							SetMusicTrack("Continue.ogg", 0, 0)
							PlayMusic(0)
							break
						case 17
							SetMusicTrack("Credits.ogg", 0, 0)
							PlayMusic(0)
							break
						case 18
							SetMusicTrack("Drowning.ogg", 0, 0)
							PlayMusic(0)
							break
					end switch
					
					if object.value9 == 0
						switch object.value4
							case 1
								if object.value8 == 1
									object.value8 = 2
								else
									object.value8 = 0
								end if
								break
							case 2
								if object.value8 == 2
									object.value8 = 3
								else
									object.value8 = 0
								end if
								break
							case 4
								object.value8 = 1
								break
							case 6
								if object.value8 == 3
									object.value8 = 4
									object.value9 = 1
									PlaySfx(SfxName[Emerald], 0)
								else
									object.value8 = 0
								end if
								break
							default
								object.value8 = 0
								break
						end switch
					end if
					break
				case 21
					break
				default
					stage.activeList = REGULAR_STAGE
					stage.listPos = object.value3
					if object.value9 == 1
						specialStage.emeralds = 127
					end if
					object.state = 7
					break
			end switch
		end if		
		break
	case 7
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			SetScreenFade(0, 0, 0, object.value0)
		else
			GetTableValue(stage.playerListPos, character.sel, CharLoad)
			LoadStage()
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	case 8
		if object.value0 < 768
			music.volume -= 10
			object.value0 += 8
			SetScreenFade(color6, color7, color6, object.value0)
		else
			GetTableValue(stage.playerListPos, character.sel, CharLoad)
			StopMusic()
			LoadPalette("SpecialStage.act",0,0,0,128)
			LoadStage()
			SetScreenFade(color6, color7, color6, 255)
		end if
		break
	case 9
		object.value0 += 8
		music.volume -= 2
		if object.value0 == 320
			StopMusic()
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = 6
			LoadStage()
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	end switch
end event


event ObjectDraw
	switch object.state
		//case 5
		case 6
		case 7
		case 8
		case 9
			temp0 = screen.xcenter
			DrawMenu(MENU_1, temp0, 40)
			break
		default
			object.animationTimer++
			if object.animationTimer > 59
				object.animationTimer = 0
			end if
			if object.animationTimer > 29
				DrawSpriteScreenXY(0, object.xpos, object.ypos)
			end if
			break
	end switch
end event


event ObjectStartup
	switch saved.mobile
	case 0
		switch saved.language
			case 0
				SpriteFrame(-72, -4, 144, 8, 1, 274)
				break
			case 1 //PTBR
				SpriteFrame(-80, -4, 160, 8, 1, 292)
				break	
			case 2 //SP
				SpriteFrame(-91, -7, 181, 11, 1, 301)
				break	
			case 3 //FR
				SpriteFrame(-72, -4, 144, 8, 1, 283)
				break	
			case 4 //GE
				SpriteFrame(-83, -7, 165, 11, 1, 262)
				break	
		end switch
		break
	case 1
		SpriteFrame(-56, -4, 112, 8, 1, 253)
		break
	end switch
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
